package com.art8173.advanced.day1.test3;

/**
 * 定义银行卡：主卡和副卡类，完成下列功能
 * 1、完成银行卡-主卡的存取款方法
 * 主卡卡有余额，卡号，户主等属性
 * 有存款和取款的方法（取款时候余额不足要有提示）
 * 2、完成银行卡-副卡的取款方法
 * 副卡额外有透支额度属性(副卡可用主卡中余额，且余额不够，可以透支额度)
 * 副卡重写取款方法（取款时候余额不足要有提示）
 * 3、写测试案例，分别测试主卡和副卡的存取款功能（存取款后显示余额）
 */
/**
 * 银行卡测试类 (修正版)
 */
public class Test3 {
    public static void main(String[] args) {
        // 主账户初始余额
        double mainAccountInitialBalance = 1000.0;

        // 1. 创建主卡
        System.out.println("=== 创建主卡和副卡，共享主账户余额 ===");
        MainCard mainCard = new MainCard("MC123456", "张三-主卡", mainAccountInitialBalance);
        SubCard subCard = new SubCard("SC789012", "张三-副卡", mainAccountInitialBalance, 500.0);

        mainCard.displayInfo();
        subCard.displayInfo();
        System.out.println("主账户初始余额: " + mainAccountInitialBalance + "元");
        System.out.println("副卡透支额度: " + subCard.getOverdraftLimit() + "元");

        // 2. 测试主卡操作
        System.out.println("\n--- 主卡存款 (增加主账户余额) ---");
        mainCard.deposit(500); // 主账户余额变为 1500

        // 3. 测试副卡操作 (影响同一主账户)
        System.out.println("\n--- 副卡取款 (余额足够) ---");
        subCard.withdraw(800); // 从主账户扣800，余额变为700

        System.out.println("\n--- 副卡取款 (余额不足，但总额度够) ---");
        subCard.withdraw(900); // 余额700不够，但总可用额度700+500=1200够，扣700余额，透支200

        // 4. 测试主卡状态 (余额已被副卡操作修改)
        System.out.println("\n--- 查询主卡状态 (余额已被副卡操作影响) ---");
        mainCard.displayInfo();
        System.out.println("主账户当前余额: " + mainCard.getBalance() + "元"); // 应为 0

        // 5. 再次尝试操作 (余额已为0)
        System.out.println("\n--- 主卡取款 (余额为0) ---");
        mainCard.withdraw(100); // 余额不足，失败

        System.out.println("\n--- 副卡取款 (余额为0，但有透支额度) ---");
        subCard.withdraw(300); // 余额0，但透支额度还有300(500-200)，成功透支300
    }
}